0883. 三维形体投影面积【简单】
1. 📝 题目描述
在 n x n 的网格 grid 中,我们放置了一些与 x,y,z 三轴对齐的 1 x 1 x 1 立方体。
每个值 v = grid[i][j] 表示有一列 v 个正方体叠放在格子 (i, j) 上。
现在,我们查看这些立方体在 xy 、yz 和 zx 平面上的投影。
投影 就像影子,将 三维 形体映射到一个 二维 平面上。从顶部、前面和侧面看立方体时,我们会看到“影子”。
返回 所有三个投影的总面积。
示例 1:

txt
输入:[[1,2],[3,4]]
输出:17
解释:这里有该形体在三个轴对齐平面上的三个投影(“阴影部分”)。1
2
3
2
3
示例 2:
txt
输入:grid = [[2]]
输出:51
2
2
示例 3:
txt
输入:[[1,0],[0,2]]
输出:81
2
2
提示:
n == grid.length == grid[i].length1 <= n <= 500 <= grid[i][j] <= 50
2. 🎯 s.1 - 暴力解法
js
/**
* @param {number[][]} grid
* @return {number}
*/
var projectionArea = function (grid) {
const n = grid.length
let xy = 0 // 俯视图投影面积
let yz = 0 // 正视图投影面积
let zx = 0 // 侧视图投影面积
for (let x = 0; x < n; x++) {
let max_zx = 0 // 当前行最大值
let max_yz = 0 // 当前列最大值
for (let y = 0; y < n; y++) {
// xy平面投影:只要有立方体就有投影
if (grid[x][y] > 0) {
xy++
}
// zx平面投影:从侧面看 - grid[固定][变化] 最大值之和
max_zx = Math.max(max_zx, grid[x][y])
// zx平面投影:从正面看 - grid[变化][固定] 最大值之和
max_yz = Math.max(max_yz, grid[y][x])
}
zx += max_zx
yz += max_yz
}
return xy + yz + zx
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
- 时间复杂度:
,其中 是网格的边长,需要遍历整个网格一次 - 空间复杂度:
,只使用了常数级别的额外空间 - 算法思路:
- xy 平面投影:统计所有非零高度的单元格数量
- yz 平面投影:从正面看 - 将
grid[i][j]中的i固定,遍历j,找到所有最大值求和; - zx 平面投影:从侧面看 - 将
grid[i][j]中的j固定,遍历i,找到所有最大值求和;
- 提交结果:
